/**
 * 取值函数和存值函数
 * 1. 在“类”的内部可以使用get和set关键字，对某个属性设置存值函数和取值函数，拦截该属性的存取行为。
 * 
 */

// 1. 存值函数
class MyClass {
  constructor(){}
  get prop(){
    return 'getter'
  }
  set prop(value){
    console.log('setter:'+value);
  }
}

let mc = new MyClass()
console.log(mc.prop);  //getter
mc.prop = 123  //setter: 123

// 2. 使用存取器类外部操作私有属性
class Fooo {
  #a
  #b
  constructor(a,b){
    this.#a = a
    this.#b = b
  }
  #sum(){
    return this.#a + this.#b  
  }
  printSum(){
    console.log(this.#sum());  // 只能在类中通过this调用私有方法
  }

  get a(){
    return this.#a
  }
  set a(value){
    this.#a = value
  }
  get b(){
    return this.#b
  }
  set b(value){
    return this.#b = value
  }
}

let fooo = new Fooo('苹果','橘子')
// fooo.#a  ❌
// fooo.#sum()  ❌
console.log(fooo.a);  //苹果
console.log(fooo.b);  //橘子
fooo.a = '香蕉'
fooo.b = '西瓜'
console.log(fooo.a);  //香蕉
console.log(fooo.b);  //西瓜
fooo.printSum();  // 香蕉西瓜